Frontend Forever App
We have a mobile app for you to download and use. And you can unlock many features in the app.
Get it now
Intall Later
Run
HTML
CSS
Javascript
Output
Document
Something #1
Something #2
Something #3
Something #4
@charset "UTF-8"; @import url(https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,600,700,800); *, :after, :before { box-sizing: border-box; padding: 0; margin: 0; } @import url(https://fonts.googleapis.com/css?family=Lexend"); html { font-size: 62.5%; line-height: normal; /* fix normalize.css */ position: relative; box-sizing: border-box; min-height: 100%; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; --polygon_gap: clamp(1.5rem, 3vw, 3rem); --polygon_gap-neg: calc(var(--polygon_gap) * -1); } body { font-family: "Lexend", sans-serif; } .container { width: 100%; max-width: 700px; margin: 0 auto; padding: calc(var(--polygon_gap) + 10px); } .boxes { display: grid; grid-template-columns: repeat(2, 1fr); aspect-ratio: 8 / 6; } .box-wrapper { width: 100%; height: 100%; transition: filter 0.5s, transform 0.5s; } .box-wrapper.active, .box-wrapper:has(.box:hover) { filter: drop-shadow(0px 15px 4px #d9d9d9); } .box { width: 100%; height: 100%; position: relative; background-color: black; color: black; clip-path: polygon(0 50%, 50% 100%, 100% 50%, 50% 0); transition: color 0.5s; cursor: pointer; } .box-wrapper.active .box, .box:hover { color: white; } .box-wrapper:nth-child(1) { transform: translateY(50%) translateX(var(--polygon_gap-neg)); } .box-wrapper.active:nth-child(1), .box-wrapper:nth-child(1):hover { transform: translateY(50%) translateX(calc(var(--polygon_gap-neg) - 10px)); } .box-wrapper:nth-child(2) { transform: translateX(-50%) translateY(var(--polygon_gap-neg)); } .box-wrapper.active:nth-child(2), .box-wrapper:nth-child(2):hover { transform: translateX(-50%) translateY(calc(var(--polygon_gap-neg) - 10px)); } .box-wrapper:nth-child(3) { transform: translateX(50%) translateY(var(--polygon_gap)); } .box-wrapper.active:nth-child(3), .box-wrapper:nth-child(3):hover { transform: translateX(50%) translateY(calc(var(--polygon_gap) + 10px)); } .box-wrapper:nth-child(4) { transform: translateY(-50%) translateX(var(--polygon_gap)); } .box-wrapper.active:nth-child(4), .box-wrapper:nth-child(4):hover { transform: translateY(-50%) translateX(calc(var(--polygon_gap) + 10px)); } .box-background { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 1; background-color: white; clip-path: polygon( 1px 50%, 50% calc(100% - 1px), calc(100% - 1px) 50%, 50% 1px ); transition: background-color 0.5s; } .box-wrapper.active .box-background, .box:hover .box-background { background-color: black; } .box-content { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 5px; font-size: clamp(1.6rem, 2.4vw, 2.4rem); font-weight: 300; } .box-content svg { height: clamp(1.6rem, 2.5vw, 2.5rem); width: auto; }
console.log("Event Fired") const boxes = document.querySelectorAll(".box-wrapper"); function activateTab(box) { boxes.forEach((t) => t.classList.remove("active")); box.classList.add("active"); } boxes.forEach((box) => { box.addEventListener("mouseover", () => { activateTab(box); }); box.addEventListener("click", () => { activateTab(box); }); });